package com.zwy.springinner.util;

import java.nio.charset.Charset;

public class GBKUtil {

    /**
     * 将字符串使用GBK编码转换为十六进制表示形式。
     *
     * @param input 输入字符串
     * @return 字符串的GBK编码的十六进制表示形式
     */
    public static String stringToHexGBK(String input) {
        // 使用GBK编码将字符串转换为字节数组
        byte[] gbkBytes = input.getBytes(Charset.forName("GBK"));

        // 构建结果字符串
        StringBuilder result = new StringBuilder();

        // 遍历字节数组并转换为十六进制表示
        for (byte b : gbkBytes) {
            // 转换为无符号整数并格式化为两位十六进制数
            result.append(String.format("%02X", b & 0xFF));
        }

        return result.toString();
    }

    /**
     * 将GBK编码的十六进制表示形式转换回原始字符串。
     *
     * @param hexString GBK编码的十六进制表示形式
     * @return 原始字符串
     */
    public static String hexGBKToString(String hexString) {
        if (hexString == null || hexString.isEmpty()) {
            return "";
        }

        // 将十六进制字符串转换为字节数组
        byte[] bytes = new byte[hexString.length() / 2];
        for (int i = 0; i < bytes.length; i++) {
            bytes[i] = (byte) Integer.parseInt(hexString.substring(2 * i, 2 * i + 2), 16);
        }

        // 使用GBK解码字节数组
        return new String(bytes, Charset.forName("GBK"));
    }

    public static void main(String[] args) {
        String input = "中国AB0"; // 示例字符串

        // 获取字符串的GBK编码的十六进制表示
        String hexGBK = stringToHexGBK(input);
        System.out.println("字符串: " + input);
        System.out.println("GBK编码的十六进制表示: " + hexGBK);

        // 将GBK编码的十六进制表示转换回字符串
        String originalString = hexGBKToString(hexGBK);
        System.out.println("还原后的字符串: " + originalString);
    }
}
